const fs = require('fs');

// 读取app.json文件,用于修改subpackages（即分包），决定该插件页面所在的文件夹是否要通过分包引入注册使用
const minData = fs.readFileSync('app.json');
const minObj = JSON.parse(minData);

//minObj.isRunPageSet为true,说明已经运行过，app.json的页面注册数据已修改过
if(!minObj.isRunPageSet) {
  const pluginArr = fs.readFileSync('pluginArr.json');
  const pluArrItem = JSON.parse(pluginArr);

  const subpackages = minObj.subpackages;
  // 根据pluginOpen.json文件的数据修改project.private.config.json文件,如果没开启某插件，则在编写打包过程中忽略其对应的分包文件夹
  const privateData = fs.readFileSync('project.private.config.json');
  const privateDataObj = JSON.parse(privateData);
  const ignoreArr = [];//privateDataObj.packOptions.ignore

  // 读取pluginOpen文件，获取后台站点开启的插件集合
  let pluObj = {};

  // 手动请求接口https://xxx.xxxxxx.com/admin/shop?route=plugin.min-app.Backend.Controllers.base-set.getPlugin读取获取后台站点开启的插件集合
  const ApiPlu = fs.readFileSync('getApiPlu.json');
  // 遍历ApiPlu的数组，判断pluArrItem是否包含，有的话往pluginOpen.json添加对应的值
  const apiPluArr = JSON.parse(ApiPlu);
  apiPluArr.forEach(apiPluItem => {
    if (pluArrItem[apiPluItem]) {
      pluObj[apiPluItem] = pluArrItem[apiPluItem];
    }
  });
  fs.writeFileSync('pluginOpen.json', JSON.stringify(pluObj, null, 2));

  // 根据pluginOpen.json文件的数据修改app.json文件的subpackages数组
  for (let plukey in pluArrItem) {
    if(pluObj[plukey]) {
      subpackages.push(pluObj[plukey]);//开启了插件，把分包信息注册到app.json
    } else {
      ignoreArr.push({
        "type": "folder",
        "value": pluArrItem[plukey].root
      });//站点没安装或开启这个插件，忽略掉该插件文件夹
    }  
  }

  // 将修改后的app.json文件写回
  minObj.subpackages = subpackages;
  minObj.isRunPageSet = true;//设置为true,锁上，防止多次重复点击编译时app.json里页面的注册重复
  fs.writeFileSync('app.json', JSON.stringify(minObj, null, 2));

  privateDataObj.packOptions.ignore = ignoreArr;
  fs.writeFileSync('project.private.config.json', JSON.stringify(privateDataObj, null, 2));
  console.log('app.json文件已成功修改');
} else {
  console.log('warn!!!!!，已运行过修改文件');
}
